home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / DJLSR111.ZIP / libsrc / c / dos / fnsplit.c < prev    next >
C/C++ Source or Header  |  1993-10-04  |  1KB  |  68 lines

  1. /*   fnsplit.c replacement for Borland version pjbk */
  2.  
  3. #include <dir.h>
  4. #include <ctype.h>
  5. #include <string.h>
  6.  
  7. int fnsplit (const char *path, char *drive, char *dir, 
  8.          char *name, char *ext)
  9. {
  10.   int flags = 0, len;
  11.   const char *pp, *pe;
  12.  
  13.   if ( drive ) *drive = '\0'; /* clear out any previous contents */
  14.   if ( dir ) *dir = '\0';
  15.   if ( name ) *name = '\0';
  16.   if ( ext ) *ext = '\0';
  17.  
  18.   pp = path;
  19.   if( isalpha( *pp) && (pp[1] == ':'))
  20.     {
  21.       flags |= DRIVE;
  22.       if ( drive )
  23.     {
  24.       strncpy( drive, pp, 2);
  25.       drive[2] = '\0';
  26.     }
  27.       pp += 2;
  28.     }
  29.   pe = strrchr( pp, '\\'); /* find terminating \ */
  30.   if ( pe ) 
  31.     { 
  32.       flags |= DIRECTORY ;
  33.       pe++;
  34.       len = pe - pp;
  35.       if ( dir )
  36.     {
  37.       strncpy( dir, pp, len);
  38.       dir[len] = '\0';
  39.     }
  40.       pp = pe;
  41.     }
  42.   pe = strrchr( pp, '.'); /* find separator */
  43.   if ( pe )
  44.     {
  45.       flags |= EXTENSION;
  46.       if ( ext ) 
  47.     {
  48.       strcpy( ext, pe);
  49.     }
  50.     }
  51.   else 
  52.     pe = strchr( pp, '\0');
  53.   if ( pp != pe )
  54.     {
  55.       flags |= FILENAME;
  56.       len = pe - pp;
  57.       if ( name ) 
  58.     {
  59.       strncpy( name, pp, len);
  60.       name[len] = '\0';
  61.     }
  62.     }
  63.   if ( strchr( pp, '*') || strchr( pp, '?'))
  64.     flags |= WILDCARDS;
  65.   return flags;
  66.   
  67. }
  68.